#include "Uart.h"
#include "iot_gpio.h"
#include "iot_uart.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
// 添加GPIO扩展功能头文件
#include "iot_gpio_ex.h"

// UART配置参数
#define UART_PORT_ID 1    // 使用UART1
#define UART_BAUDRATE 9600 // 波特率
#define UART_ATTR_STOP_BIT 0 // 停止位：1位
#define UART_ATTR_PARITY_BIT 0 // 校验位：无

// 初始化UART
int Uart1_Init(void)
{
	// UART属性结构
	IotUartAttribute uart_attr = {
		.baudRate = UART_BAUDRATE,
		.dataBits = 8,            // 8位数据位
		.stopBits = UART_ATTR_STOP_BIT,
		.parity = UART_ATTR_PARITY_BIT,
		.rxBlock = 1,            // 阻塞方式
		.txBlock = 1
	};

	// 初始化GPIO
	if (IoTGpioInit(UART_TX_GPIO) != 0) {
		printf("初始化TX引脚(GPIO%d)失败\n", UART_TX_GPIO);
		return -1;
	}
	
	if (IoTGpioInit(UART_RX_GPIO) != 0) {
		printf("初始化RX引脚(GPIO%d)失败\n", UART_RX_GPIO);
		return -1;
	}
	
	// 设置GPIO复用为UART功能
	if (IoTGpioSetFunc(UART_TX_GPIO, IOT_GPIO_FUNC_GPIO_6_UART1_TXD) != 0) {
		printf("设置TX引脚功能失败\n");
		return -1;
	}
	
	if (IoTGpioSetFunc(UART_RX_GPIO, IOT_GPIO_FUNC_GPIO_5_UART1_RXD) != 0) {
		printf("设置RX引脚功能失败\n");
		return -1;
	}

	// 初始化UART
	if (IoTUartInit(UART_PORT_ID, &uart_attr) != 0) {
		printf("UART初始化失败\n");
		return -1;
	}

	printf("UART初始化成功，波特率:%d\n", UART_BAUDRATE);
	return 0;
}

// 发送单个字节
void Uart_TxData(unsigned char Data)
{
	IoTUartWrite(UART_PORT_ID, &Data, 1);
}

// 发送字符串
void Uart_TxString(const char* str)
{
	if (str == NULL) {
		return;
	}
	
	IoTUartWrite(UART_PORT_ID, (const unsigned char*)str, strlen(str));
}